<?
class Rule_Image extends Rule
{
	public $min_w;
	public $min_h;
	public $max_w;
	public $max_h;
	public $exts = Array('jpg','jpeg','png','gif');
	
	function __construct($name,$min_w=0,$min_h=0,$max_w=0,$max_h=0)
	{
		$this->name=$name;
		$this->min_w=$min_w;
		$this->min_h=$min_h;
		$this->max_w=$max_w;
		$this->max_h=$max_h;
	}
	
	function Check($hash)
	{
		if(!is_uploaded_file($_FILES[$this->name]['tmp_name'])) return true;
		
		$path_parts = pathinfo($_FILES[$this->name]['name']);
		if( !in_array(strtolower($path_parts['extension']),$this->exts) )
		{
			$this->error_message = "Файл должен быть картинкой";
			return false;
		}
		
		if( filesize($_FILES[$this->name]['tmp_name']) > 50000 )
		{
			$im = new Imagick( $_FILES[$this->name]['tmp_name'] );
			// подсчитаем количество кадров
			$frames_count = 0;
			foreach ($im as $im_frame)
			{
				$frames_count++;
			}
			if($frames_count>1)
			{
				$this->error_message = "Извините, мы не принимаем анимированные GIF-файлы больше 50кБ";
				return false;
			}
		}
		
		
		$info = getimagesize($_FILES[$this->name]['tmp_name']);
		if(  !$info ) 
		{
			$this->error_message = "Файл должен быть картинкой";
			return false;
		}
		
		if($info[0]<$this->min_w || $info[1]<$this->min_h)
		{
			$this->error_message = "Размер картинки должен быть не менее {$this->min_w}x{$this->min_h} пикселей";
			return false;
		}
		
		if(($this->max_w && $this->max_h) && ($info[0]>$this->max_w || $info[1]>$this->max_h) )
		{
			$this->error_message = "Размер картинки должен быть не более {$this->max_w}x{$this->max_h} пикселей";
			return false;
		}
		
		return true;
	}
}